# write by hashaki
# first edit on 2018/11/15
# last change on 2019/01/31
# 交易所数据到引擎的中间层，合并处理各种交易所发来的数据
# 交易所到中间层的通信不使用网络通信，中间层到引擎层的通信使用网络通信
# 中间层把tick数据合成分钟数据保存到本地CSV再推送到交易引擎
# 这里有两个线程，一个线程用来获取数据推送，一个线程用作数据处理和保存
import socket
from threading import Thread
from time import sleep
from datetime import datetime

class HaGateway:
    def __init__(self):
        self.socket=socket.socket()                       # gateway中间层的socket通信接口
        self.host=None                                    # 通信层的host
        self.port =None                                   # 通信层的端口
        self.socketList=[]                                # 用一个列表保存多个数据qpi进口的socket地址
        self.socket_num=0                                 # 交易所那边连接到的socket数量

        self.gatewayDict={}                               # 交易所接口类的字典

        self._activate=False                              # 运行开关
    
    # -----------------------------------------------------------------------
    # 数据类进来部分，外部设置部分
    def setGateway(self,gatewayDict):
        '''传进来的是交易所gateway的实例类'''
        self.gatewayDict=gatewayDict
    
    def setTCP(self,host='127.0.0.1',port=6666):
        '''设置通信曾对引擎层的通信接口'''
        self.host=host
        self.port=port
        self.socket.bind((self.host,self.port))
        self.socket.listen(2)

    def setSocketIn(self,sockets):
        '''传入数据进口，sockets=[{'host':123,'port':123},{}]'''
        self.socketList=sockets
        self.socket_num=len(self.socketList)

    # -----------------------------------------------------------------------
    # 数据处理部分
    def make1MinBar(self,tick_data):
        '''传进来tick数据，合成一分钟K线 tick_data='''
        pass

    def make5MinBar(self,bar_1min):
        '''传进1分钟的bar来生成5分钟bar'''
        pass

    def make30MinBar(self,bar_1min):
        '''使用1分钟bar来生成30分钟bar'''
        pass
    
    def make1hourBar(self,bar_1min):
        '''读取1分钟bar来生成一小时bar'''
        pass
    
    def make1dBar(self,bar_1hour):
        '''读取1小时bar来生成日线'''
        pass

    def getTheGatewayData(self):
        '''从交易所那里获取数据'''
        pass
        
    # -----------------------------------------------------------------------
    # 数据保存部分
    def saveAsCSV(self,bar):
        '''保存1分钟bar到本地CSV'''
        pass

    def readCSVdata(self,bar_type):
        '''d读取CSV数据'''
        pass
        
    # -----------------------------------------------------------------------
    # 给外部的输出接口
    def start(self):
        '''开始'''
        self._activate=True
    
    def stop(self):
        '''停止'''
        self._activate=False

    def run(self):
        '''启动数据网关'''
        client,address=self.socket.accept()
        while self._activate:
            pass
